#include "./../inc/jpg.h"
#include "./../inc/lcd.h"

void show_jpg(char *path, LCDBuffer lcd_mmap);

int main()
{

    FILE *fp_lcd = lcd_init();
    LCDBuffer lcd_mmap = lcd_mmap_init(fp_lcd);

    show_jpg("res/gradient_image.jpg", lcd_mmap);

    free_lcd(fp_lcd, lcd_mmap);

    return 0;
}

void show_jpg(char *path, LCDBuffer lcd_mmap)
{
    int width, height;

    unsigned char *rgb_data = decode_jpeg("res/gradient_image.jpg", &width, &height);
    if (rgb_data == NULL)
    {
        return;
    }

    for (int i = 0; i < height; i++)
    {
        for (int j = 0; j < width; j++)
        {
            // 计算当前像素在 RGB 数据中的起始地址
            unsigned char *pixel = rgb_data + (i * width + j) * 3;

            // 提取 R、G、B 分量（注意：RGB 数据是 unsigned char 类型）
            unsigned char r = pixel[0]; // 红色分量
            unsigned char g = pixel[1]; // 绿色分量
            unsigned char b = pixel[2]; // 蓝色分量

            // 转换为 LCD 所需的 ARGB 格式（或 ARGB 中的 RGB，alpha 设为 0）
            // 假设 LCD 每个像素为 32 位（0x00RRGGBB，高 8 位为 alpha 透明通道）
            unsigned int color = (r << 16) | (g << 8) | (b << 0);

            // 写入帧缓冲区
            lcd_mmap[i][j] = color;
        }
    }
    free(rgb_data);
}